package io.jt808.proto.req;

import io.norland.buffer.AutoBuffer;
import io.norland.annotations.Proto;
import io.norland.proto.IProto;
import lombok.Data;

/**
 * 多媒体数据上传
 */
@Proto("0801")
@Data
public class JT0801 implements IProto {
    /**
     * 多媒体数据 ID
     */

    private int id;

    /**
     * 多媒体类型
     * 0：图像；1：音频；2：视频；
     */
    private byte mediaType;
    /**
     * 多媒体格式编码
     * 0：JPEG；1：TIF；2：MP3；3：WAV；4：WMV；
     * 其他保留
     */
    private byte codeFormat;
    /**
     * 多媒体格式编码
     * 0：平台下发指令；1：定时动作；2：抢劫报警触
     * 发；3：碰撞侧翻报警触发；4：门开拍照；5：门
     * 关拍照；6：车门由开变关，时速从＜20 公里到超
     * 过 20 公里；7：定距拍照；
     * 其他保留
     */
    private byte eventType;
    /**
     * 重传包ID列表
     */
    private short channelId;

    /**
     * 位置信息汇报(0x0200)消息体
     */
    private JT0200 position;
    /**
     * 多媒体数据包
     */
    private byte[] multimediaData;

    public byte[] writeToBytes() {
        AutoBuffer buffer = new AutoBuffer();
        buffer.writeInt(id);
        buffer.writeByte(mediaType);
        buffer.writeByte(codeFormat);
        buffer.writeByte(eventType);
        buffer.writeByte(channelId);
        buffer.writeBytes(position.writeToBytes());
        buffer.writeBytes(multimediaData);
        return buffer.array();
    }

    public void readFromBuf(AutoBuffer buffer) {
        id = buffer.readInt();
        mediaType = buffer.readByte();
        codeFormat = buffer.readByte();
        eventType = buffer.readByte();
        channelId = buffer.readByte();
        JT0200 jt0200 = new JT0200();
        jt0200.readFromBuf(buffer.slice(buffer.readerIndex(), 28));
        buffer.skipBytes(28);
        position = jt0200;
        multimediaData = buffer.readBytes();
    }

    public String getMediaType() {
        switch (mediaType) {
            case 0:
                return "图像";
            case 1:
                return "音频";
            default:// 2
                return "视频";
        }
    }

    public String getMediaCodeFormat() {
        switch (codeFormat) {
            case 0:
                return "JPEG";
            case 1:
                return "TIF";
            case 2:
                return "MP3";
            case 3:
                return "WAV";
            default://4
                return "WMV";
        }
    }

    public String getEventType() {
        switch (eventType) {
            case 0:
                return "平台下发指令";
            case 1:
                return "定时动作";
            case 2:
                return "抢劫报警触发";
            default:// 3:
                return "碰撞侧翻报警触发";
        }
    }

//    public static void main(String[] args) {
////        byte[] bytes1 = new byte[]{
////                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x59, 0x5e,
////                0x32, 0x06, (byte) 0xbc, (byte) 0xfd, 0x58, 0x00, 0x00, 0x02, (byte) 0x94, 0x00, 0x00,
////                0x18, 0x10, 0x24, 0x14, 0x19, 0x36
////        };
//        byte[] bytes = new byte[]{
//                0x00, 0x01, 0x00, 0x01,
//                0x02,
//                0x00,
//                0x03,
//                0x00,
//                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x59, 0x5e,
//                0x32, 0x06, (byte) 0xbc, (byte) 0xfd, 0x58, 0x00, 0x00, 0x02, (byte) 0x94, 0x00, 0x00,
//                0x18, 0x10, 0x24, 0x14, 0x19, 0x36,
//                0x18, 0x10, 0x24, 0x14, 0x19, 0x36,
//        };
//        AutoBuffer buffer = new AutoBuffer(bytes);
//        JT0801 jt8003 = new JT0801();
//        jt8003.readFromBuf(buffer);
////        System.out.println(Tools.ToHexString(bytes));
////        System.out.println(Tools.ToHexString(jt8003.writeToBytes()));
//        System.out.printf(new String(bytes).equals(new String(jt8003.writeToBytes())) + "");
//    }
}